package structure;

/**
 * Datenstruktur, in der Speicheradresse, Op-Code, Zeilennummer, 
 * restlicher Code, sowie die Variablen f�r die 7, 8 und 11-Bit Argumente gespeichert werden.
 * @author Patrick Lehmann
 *
 */
public class Line {

    /**
     * Speicheradresse.
     */
    private int memoryAddress;
    /**
     * OpCode.
     */
    private int opCode;
    /**
     * Zeilennummer.
     */
    private int lineNumber;
    /**
     * Programmcode und restlicher Inhalt einer Zeile.
     */
    private String programCode;
    /**
     * Die Letzten 7 Bit des OpCodes, die ein Argument repraesentieren
     */
    private int arg7Bit;
    /**
     * Die Letzten 8 Bit des OpCodes, die ein Argument repraesentieren
     */
    private int arg8Bit;
    /**
     * Die Letzten 11 Bit des OpCodes, die ein Argument repraesentieren
     */
    private int arg11Bit;

    /**
     * Konstruktor. Setzt die Attribute eines Objekts.
     * Für die Attribute memoryAddress und opCode wird der übergebene String als
     * hexadezimaler-Integer geparst.
     * Für das Attribut lineNumber wird der String als dezimaler-Integer geparst.
     * Das Attribut übernimmt den Wert als String.
     * Weiterhin werden die Attribute arg7Bit, arg8Bit und arg11Bit durch Maskierung
     * gesetzt.
     * @param _memoryAddress
     * @param _opCode
     * @param _lineNumber
     * @param _programCode
     */
    public Line(String _memoryAddress, String _opCode, String _lineNumber, String _programCode) {
        memoryAddress = Integer.parseInt(_memoryAddress, 16);	//String als Hex-Zahl parsen
        opCode = Integer.parseInt(_opCode, 16);
        lineNumber = Integer.parseInt(_lineNumber);		//String als Integer parsen
        programCode = _programCode;

        arg7Bit = opCode & 0x7F;	//Maskierung der letzten 7 Bits
        arg8Bit = opCode & 0xFF;	//Maskierung der letzten 8 Bits
        arg11Bit = opCode & 0x7FF;	//Maskierung der letzten 11 Bits
    }

    public int getMemoryAddress() {
        return memoryAddress;
    }

    public int getOpCode() {
        return opCode;
    }

    public int getLineNumber() {
        return lineNumber;
    }

    public String getProgramCode() {
        return programCode;
    }

    public int getArg7Bit() {
        return arg7Bit;
    }

    public int getArg8Bit() {
        return arg8Bit;
    }

    public int getArg11Bit() {
        return arg11Bit;
    }
}
